package com.ruoyi.project.storage.service.impl;


import com.ruoyi.project.common.enums.RecordPointWay;
import com.ruoyi.project.common.util.ParameterUtil;
import com.ruoyi.project.storage.domain.Point;
import com.ruoyi.project.storage.mapper.PointMapper;
import com.ruoyi.project.storage.service.IPointService;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 请添加注释
 *
 * @author mengyuanqing
 * @date 2020/5/3
 */
@Service
public class PointServiceImpl implements IPointService {
    /**
     * 积分Mapper
     */
    private final PointMapper pointMapper;

    /**
     * 通过构造方法注入
     *
     * @param pointMapper 积分Mapper
     */
    public PointServiceImpl(PointMapper pointMapper) {
        this.pointMapper = pointMapper;
    }

    /**
     * 查询积分记录列表
     *
     * @param userId 用户id积分记录
     * @return 积分记录集合
     */
    @Override
    public List<Point> selectPointList(Long userId) {
        // 实例化积分记录对象
        Point point = new Point();
        // 设置用户id
        point.setUserId(userId);
        // 返回结果
        return pointMapper.selectPointList(userId);
    }

    /**
     * 新增积分记录
     *
     * @param recordPointWay  方式（1：注册赠送，2活动获得，3积分使用）
     * @param userId          用户id
     * @param points          积分
     * @param advertisementId 广告id
     * @param orderId         订单id
     */
    @Override
    public int insertPointRecord(RecordPointWay recordPointWay, Long userId, Long points, Long advertisementId, Long orderId) {
        // 实例化对象
        Point point = new Point();
        // 如果为手机注册赠送
        if (RecordPointWay.REGIST.equals(recordPointWay)) {
            // 设置基础字段
            ParameterUtil.setRegistEntity(point);
        } else if (RecordPointWay.TASK.equals(recordPointWay)) {
            // 如果为定时任务设置
            ParameterUtil.setTaskEntity(point);
        } else {
            // 设置创建字段
            ParameterUtil.setCreateEntity(point);
        }
        // 设置用户id
        point.setUserId(userId);
        // 设置方式
        point.setWay(recordPointWay.getCode());
        // 设置积分
        point.setPoints(points);
        // 设置广告id
        point.setAdvertisementId(advertisementId);
        // 设置订单id
        point.setOrderId(orderId);
        // 返回插入积分记录条数
        return pointMapper.insertPointRecord(point);
    }
}

